package com.cwh.taskcenter.domain.task.model;

import com.cwh.taskcenter.domain.engine.rule.parser.ConditionTree;
import lombok.Data;
import org.springframework.util.CollectionUtils;

import java.util.List;

/**
 * 任务规则值对象
 * 定义任务的业务规则和约束条件
 * @author cwh
 */
@Data
public class TaskRule {

    private Long taskId;

    /**
     * 任务触发事件
     */
    private String eventType;

    /**
     * 是否需要进度计算
     */
    private boolean requireProgressCalculation;

    /**
     * 规则树
     */
    private ConditionTree conditionTree;

    /**
     * 任务奖励
     */
    private List<BenefitRule> benefits;


    public void validate() {
        if (conditionTree == null) {
            throw new IllegalArgumentException("任务规则不能为空");
        }
        if (CollectionUtils.isEmpty(benefits)) {
            throw new IllegalArgumentException("任务奖励不能为空");
        }
        benefits.forEach(BenefitRule::validate);
    }
}
